CC = gcc
CFLAGS = -Iinclude -Wall -Wextra -g
SRC_DIR = src
OBJ_DIR = obj
BIN_DIR = bin

# Source files
BOOT_SRC = $(SRC_DIR)/boot/bootloader.c
KEYBOARD_SRC = $(SRC_DIR)/drivers/keyboard.c
SCREEN_SRC = $(SRC_DIR)/drivers/screen.c
KERNEL_SRC = $(SRC_DIR)/kernel/kernel.c
MEMORY_SRC = $(SRC_DIR)/kernel/memory.c
STRING_SRC = $(SRC_DIR)/lib/string.c
UTILS_SRC = $(SRC_DIR)/lib/utils.c
SYS_SRC = $(SRC_DIR)/sys/sys.c
MAIN_SRC = $(SRC_DIR)/main.c

# Object files
BOOT_OBJ = $(OBJ_DIR)/bootloader.o
KEYBOARD_OBJ = $(OBJ_DIR)/keyboard.o
SCREEN_OBJ = $(OBJ_DIR)/screen.o
KERNEL_OBJ = $(OBJ_DIR)/kernel.o
MEMORY_OBJ = $(OBJ_DIR)/memory.o
STRING_OBJ = $(OBJ_DIR)/string.o
UTILS_OBJ = $(OBJ_DIR)/utils.o
SYS_OBJ = $(OBJ_DIR)/sys.o
MAIN_OBJ = $(OBJ_DIR)/main.o

# Final executable
TARGET = $(BIN_DIR)/dos_os

# Build rules
all: $(TARGET)

$(TARGET): $(BOOT_OBJ) $(KEYBOARD_OBJ) $(SCREEN_OBJ) $(KERNEL_OBJ) $(MEMORY_OBJ) $(STRING_OBJ) $(UTILS_OBJ) $(SYS_OBJ) $(MAIN_OBJ)
	$(CC) -o $@ $^

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
	@mkdir -p $(OBJ_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -rf $(OBJ_DIR)/*.o $(TARGET)

.PHONY: all clean